2023/12/231510字符

数组类型

package main

import "fmt"

func main() {
    var a [5] int
    fmt.Println(a)  //--> [0 0 0 0 0]

    var c = [5] int{}
    fmt.Println(c)  //--> [0 0 0 0 0]
    
    var b = [...] int{ 1, 2, 3, 4, 5 }
    fmt.Println(b)  //--> [1 2 3 4 5]

    // 内置函数
    // len(b)  // 长度 (array/map/slice/string)
    // cap(b)  // 容量
}

数组的遍历

package main

import "fmt"

func main() {
        var arr = [...] int{ 1, 2, 3, 4, 5 }
        for index, value := range arr {
                fmt.Println(index, value)
        }
}

内存分析

数组的每一项都是值类型,被直接赋值后的数组会开辟新的内存空间

package main

import "fmt"

func main() {
    var arr1 = [...] int{ 1, 2, 3, 4, 5 }

    var arr2 = arr1
    fmt.Printf("%p, %p\n", &arr1, &arr2)  //--> 0xc00012c030, 0xc00012c060
    fmt.Println(arr1 == arr2)  //--> true  go 会对数组中做深度比较

    arr2[0] = 0
    fmt.Println(arr1 == arr2, arr1, arr2)  //--> false [1 2 3 4 5] [0 2 3 4 5]

    fmt.Println(&arr1[0], &arr2[0])  //--> 0xc0000160c0 0xc0000160f0
    fmt.Println(&arr1[1], &arr2[1])  //--> 0xc0000160c8 0xc0000160f8

    arr2[1] = 6
    fmt.Println(arr1, arr2)  //--> [1 2 3 4 5] [1 6 3 4 5]

}

冒泡排序

package main

import "fmt"

func main() {
    var arr = [...] int{ 3, 1, 6, 9, 4 }

    const length = len(arr)
    for i := 1; i < length; i++ {
        for j := 0; j < length - i; j++ {
            if arr[j] > arr[j + 1] {
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
            }
        }
    }
    
    fmt.Println(arr)  //--> [1 3 4 6 9]
}